package ecmnext.action;

import java.util.Calendar;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import junit.framework.*;

public class TestEchanges extends TestCase{
	
	public void testDivers(){
		int j = 11/2;
		assertTrue(j == 5);
	}
	
	public void testOrdres(){

		Moteur M = new Moteur(1990,1,1,22,30);
		ListeOrdres liste = new ListeOrdres();
		Joueur J1 = new Joueur("Joueur 1", 100000);
		Ordre o1 = new Ordre(J1,"ACHAT", 90,2,M.DecalageTemps(-1,0));
		Ordre o2 = new Ordre(J1,"ACHAT", 10,2,M.DecalageTemps(-1,0));
		Ordre o3 = new Ordre(J1,"ACHAT", 29,2,M.DecalageTemps(-1,0));
		Ordre o4 = new Ordre(J1,"ACHAT", 50,2,M.DecalageTemps(-1,0));
		liste.add(o1);
		assertTrue(liste.contains(o1));
		liste.add(o2);
		assertFalse(liste.get(1).getPrix() == 10); //Dernier inséré = premier.
		liste = liste.trifusion(true);
		assertTrue(liste.get(1).getPrix() == 10);
		assertTrue(liste.size() == 2);
		liste.add(o3);
		liste.add(o4);
		liste = liste.trifusion(false);
		assertTrue(liste.get(1).getPrix() == 50);
	}
	
	public void testListeOrdres(){
		Moteur M = new Moteur(1990,1,1,22,30);
		Joueur J1 = new Joueur("Joueur 1", 100000);
		
		ListeOrdres L1 = new ListeOrdres();
		ListeOrdres L2 = new ListeOrdres();
		Ordre o1 = new Ordre(J1,"ACHAT", 90,2,M.DecalageTemps(-1,0));
		Ordre o2 = new Ordre(J1,"ACHAT", 10,2,M.DecalageTemps(-1,0));
		Ordre o3 = new Ordre(J1,"ACHAT", 29,2,M.DecalageTemps(1,30));
		L1.add(o3);
		L1.add(o2);
		L2.add(o1);
		ListeOrdres L3 = L1.majOrdres(L2, M.getTemps()); //On remplace tout ce qui est plus vieux que maintenant
														 //par le contenu de L2.
		assertTrue(L3.get(0).getPrix() == 90);	//o2 n'existe plus, ne reste que o2 et o3.
		assertFalse(L3.contains(o2));
	}
	public void testManipulationTemps(){
		Moteur M = new Moteur(1990,1,1,22,30);
		assertTrue(M.getTemps().get(Calendar.YEAR) == 1990);
		Joueur J1 = new Joueur("Joueur 1", 30000);
		Ordre o1 = new Ordre(J1,"ACHAT", 90,2,M.DecalageTemps(-1,0));
		Ordre o2 = new Ordre(J1,"ACHAT", 10,2,M.DecalageTemps(0,-30));
		assertTrue(o1.PlusTot(M.DecalageTemps(0,-30)));
		M.actualise(1990,1,1,21,59);
		ListeOrdres liste = new ListeOrdres();
		liste.add(o1);
		liste.add(o2);
		liste = liste.recupOrdres(M.DecalageTemps(0, 0),true);
		assertTrue(liste.get(0).getPrix() == 90);
	}
	
	public void testAchat(){
		Moteur M = new Moteur(1990,1,1,22,30);
		Joueur J1 = new Joueur("Joueur 1",30000);
		Joueur J2 = new Joueur("Joueur 2",30000);
		M.CreerOrdre(J1,"ACHAT",20,100, M.DecalageTemps(-1,0));
		M.CreerOrdre(J2,"VENTE", 10,250, M.DecalageTemps(0,-30));
		M.CreerOrdre(J2,"VENTE", 10,121, M.DecalageTemps(3,0));
		assertTrue(J1.getNbreActions() == 0);
		M.actualise(1990,1,1,23,30);
		assertTrue(M.getListeVentes().get(1).getQuantite() == 121); //On vérifie que l'achat trop tard est intouché.
		assertTrue(M.getTaux() == 15);
		assertTrue(M.getListeAchats().isEmpty()); //Il n'y a plus d'ordre d'achat.
		assertTrue(J1.getNbreActions() == 100); // Le joueur a reçu ce qu'il voulait.
		assertTrue(J1.getArgent() == 30000 - 15*100); // Et perdu ce qu'il fallait.
		assertTrue(M.getListeVentes().get(0).getQuantite() == 250 - 100); // Vente partielle réussie?
		assertTrue(J2.getArgent() == 30000 + 15*100); //L'argent est-il mis à jour comme il faut?
		
	}
	
	public void testJeu(){
		Jeu Jeu = new Jeu();
		Moteur M = new Moteur(1990,1,1,22,30);
		Session S = new Session(M);
		Jeu.addSession(S);
	}
	

	
}

